iT邦幫忙

2023 iThome 鐵人賽

DAY 29
0
Odoo

Odoo 16 入門介紹系列 第 29

補充 model 的繼承用法

  • 分享至 

  • xImage
  •  

當使用Odoo開發模塊時,繼承是一個非常重要的概念,它允許你擴展現有的功能或修改現有的模型,同時保留原始模型的所有功能。在Odoo中,有三種常見的繼承方式,分別是類繼承(class inheritance),原型繼承(prototype inheritance)和委託繼承(delegation inheritance)。讓我們更深入地了解這些概念:

類繼承(Class Inheritance):

介紹:類繼承是透過Python類的繼承機制實現的。你可以創建一個新的類別,繼承一個現有的Odoo模型類別,通常是models.Model的基本模型類別。然後,你可以在新類別中新增新的欄位、方法和屬性,同時也可以覆寫或擴展父類別中的方法。這種繼承方式允許你以物件導向的方式修改模型的行為。
範例:在上述範例中,我們創建了一個新的ProductInherit類,並通過_inherit屬性指定它要繼承的基本模型為product.product,然後新增了一個production_date欄位用於記錄產品的生產日期。
原型繼承(Prototype Inheritance):

介紹:原型繼承用於在視圖層級上進行微調和個性化定制。你可以創建一個新的視圖,將其原型指向一個現有的視圖,從而繼承原視圖的結構和屬性。然後,你可以在新視圖中新增、修改或刪除欄位、控制元件等,以滿足特定需求。
範例:在上述範例中,我們創建了一個名為view_sale_order_inherit的新視圖,並將其原型指向現有的銷售訂單視圖sale.view_order_form。然後,我們在新視圖中新增了一個名為custom_note的欄位,用於備註特定訂單的重要資訊。
委託繼承(Delegation Inheritance):

介紹:委託繼承允許你創建一個新的模型,將其基礎模型指向一個現有的模型,從而繼承基礎模型的欄位、方法和行為。然後,你可以在新模型中新增額外的欄位、方法等,甚至覆寫基礎模型的方法,以滿足特定的定制需求。
範例:在上述範例中,我們創建了一個名為CustomPartner的新模型,並通過_inherit屬性指定它要繼承的基礎模型為res.partner,然後新增了一個special_category欄位,用於存儲客戶的特殊分類。
這三種繼承方式在Odoo開發中非常常見,它們允許你保持代碼的模組化和可維護性,同時在不修改原始模型代碼的情況下擴展和自定義功能。當需要在Odoo中進行自定義開發時,了解如何使用這些繼承方式將對你非常有幫助。此外,你還可以通過觀看Odoo的官方文檔和示例代碼來深入了解這些概念。

class_inheritance (類繼承)

  • 介紹 : 類繼承是透過 Python 類的繼承機制實現的。你可以創建一個新的類別,繼承一個現有的 Odoo 模型類別(通常是如 models.Model 的基本模型類別)。然後,你可以在新類別中新增新的欄位、方法和屬性,同時也可以覆寫或擴展父類別中的方法。這種繼承方式允許你以物件導向的方式修改模型的行為。
  • 範例 : 假設我們有一個名為「Product」的基本模型,現在我們想為產品新增一個欄位,以記錄產品的生產日期。
from odoo import models, fields

class ProductInherit(models.Model):
    _inherit = 'product.product'
    
    production_date = fields.Date(string="Production Date")

prototype_inheritance (原型繼承)

  • 介紹 : 原型繼承用於在視圖層級上進行微調和個性化定制。你可以創建一個新的視圖,將其原型指向一個現有的視圖,從而繼承原視圖的結構和屬性。然後,你可以在新視圖中新增、修改或刪除欄位、控制元件等,以滿足特定需求。
  • 範例 : 假設我們想要在銷售訂單中新增一個欄位,用於備註特定訂單的重要資訊。
<record id="view_sale_order_inherit" model="ir.ui.view">
    <field name="name">sale.order.inherit</field>
    <field name="model">sale.order</field>
    <field name="inherit_id" ref="sale.view_order_form"/>
    <field name="arch" type="xml">
        <field name="partner_id" position="after">
            <field name="custom_note" string="Custom Note"/>
        </field>
    </field>
</record>

delegation_inheritance (委託繼承)

  • 介紹 : 委託繼承允許你創建一個新的模型,將其基礎模型指向一個現有的模型,從而繼承基礎模型的欄位、方法和行為。然後,你可以在新模型中新增額外的欄位、方法等,甚至覆寫基礎模型的方法,以滿足特定的定制需求。
  • 範例 : 假設我們想要為現有的「res.partner」模型創建一個定制版本,其中包含一個額外的欄位,用於存儲客戶的特殊分類。
from odoo import models, fields

class CustomPartner(models.Model):
    _name = 'custom.partner'
    _description = 'Custom Partner'
    _inherit = 'res.partner'
    
    special_category = fields.Char(string="Special Category")

上一篇
關聯欄位的介紹
下一篇
30 天的odoo 學習總結
系列文
Odoo 16 入門介紹30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言